/**
 * 日志级别枚举
 */
export enum LogLevel {
  DEBUG = 0,
  INFO = 1,
  WARN = 2,
  ERROR = 3
}

/**
 * 日志条目接口
 */
export interface LogEntry {
  timestamp: string;
  level: string;
  message: string;
  prefix?: string;
  params?: any;
}

/**
 * 日志配置接口
 */
interface LoggerConfig {
  level: LogLevel;
  prefix?: string;
}

/**
 * 默认日志配置
 */
const defaultConfig: LoggerConfig = {
  level: LogLevel.DEBUG,
  prefix: 'App'
};

/**
 * 日志工具类
 */
class Logger {
  private config: LoggerConfig;

  constructor(config: Partial<LoggerConfig> = {}) {
    this.config = { ...defaultConfig, ...config };
  }

  /**
   * 设置日志配置
   * @param config 新的日志配置
   */
  setConfig(config: Partial<LoggerConfig>): void {
    this.config = { ...this.config, ...config };
  }

  /**
   * 输出调试日志
   * @param message 日志消息
   * @param optionalParams 可选参数
   */
  debug(message: string, ...optionalParams: any[]): void {
    if (this.config.level <= LogLevel.DEBUG) {
      this.log('DEBUG', message, ...optionalParams);
    }
  }

  /**
   * 输出信息日志
   * @param message 日志消息
   * @param optionalParams 可选参数
   */
  info(message: string, ...optionalParams: any[]): void {
    if (this.config.level <= LogLevel.INFO) {
      this.log('INFO', message, ...optionalParams);
    }
  }

  /**
   * 输出警告日志
   * @param message 日志消息
   * @param optionalParams 可选参数
   */
  warn(message: string, ...optionalParams: any[]): void {
    if (this.config.level <= LogLevel.WARN) {
      this.log('WARN', message, ...optionalParams);
    }
  }

  /**
   * 输出错误日志
   * @param message 日志消息
   * @param optionalParams 可选参数
   */
  error(message: string, ...optionalParams: any[]): void {
    if (this.config.level <= LogLevel.ERROR) {
      this.log('ERROR', message, ...optionalParams);
    }
  }

  /**
   * 格式化并输出日志
   * @param level 日志级别
   * @param message 日志消息
   * @param optionalParams 可选参数
   */
  private log(level: string, message: string, ...optionalParams: any[]): void {
    const timestamp = new Date().toISOString();
    const prefix = this.config.prefix ? `[${this.config.prefix}]` : '';
    const logMessage = `[${timestamp}] ${prefix} ${level}: ${message}`;

    // 确保日志总是输出到控制台
    switch (level) {
      case 'DEBUG':
        console.debug(logMessage, ...optionalParams);
        break;
      case 'INFO':
        console.info(logMessage, ...optionalParams);
        break;
      case 'WARN':
        console.warn(logMessage, ...optionalParams);
        break;
      case 'ERROR':
        console.error(logMessage, ...optionalParams);
        break;
      default:
        console.log(`[${timestamp}] ${prefix} ${level}: ${message}`, ...optionalParams);
    }
  }
}

// 创建默认日志实例
const logger = new Logger();

// 确保在开发环境中也能输出日志到控制台
if (import.meta.env?.MODE === 'development' || import.meta.env?.MODE === 'dev') {
  logger.setConfig({
    level: LogLevel.DEBUG
  });
}

export default logger;
export { Logger };